package com.itlong.cloud.property.service;

import com.itlong.cloud.POJO.DTO.property.PropertyHouseholdRoleAuthDTO;
import com.itlong.cloud.POJO.DTO.property.PropertyHouseholdRoleGetPageDTO;
import com.itlong.cloud.POJO.DTO.property.PropertyHouseholdRoleSaveDTO;
import com.itlong.cloud.POJO.VO.property.PropertyHouseHoldRoleElevatorGetPageVO;
import com.itlong.cloud.POJO.VO.property.PropertyHouseholdRoleEntranceGetPageVO;
import com.itlong.cloud.POJO.VO.property.PropertyHouseholdRoleGetPageVO;
import com.itlong.cloud.utils.page.Page;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      物业系统住户权限(角色组)分配接口服务接口
 * </desc>
 *
 * @createDate 2019/02/20
 */
public interface IPropertyHouseholdRoleService {

    /**
     * <desc>
     *      添加住户角色组信息
     * </desc>
     *
     * @param propertyHouseholdRoleSaveDTO 添加住户角色组信息数据DTO
     * @return 受影响的行数
     * @author wangzhi
     * @createDate 2019/02/20
     */
    Map<String,String> saveHouseholdRole(PropertyHouseholdRoleSaveDTO propertyHouseholdRoleSaveDTO) throws Exception;

    /**
     * <desc>
     *      分页获取住户角色组信息
     * </desc>
     *
     * @param propertyHouseholdRoleGetPageDTO 添加住户角色组信息数据DTO
     * @return 分页结果
     * @author wangzhi
     * @createDate 2019/02/21
     */
    Page<PropertyHouseholdRoleGetPageVO> getPage(PropertyHouseholdRoleGetPageDTO propertyHouseholdRoleGetPageDTO) throws Exception;

    /**
     * <desc>
     *      获取单个住户角色组信息
     * </desc>
     *
     * @param propertyHouseholdRoleGetPageDTO 添加住户角色组信息数据DTO
     * @return 单个住户角色组信息
     * @author wangzhi
     * @createDate 2019/02/21
     */
    PropertyHouseholdRoleGetPageVO getOne(PropertyHouseholdRoleGetPageDTO propertyHouseholdRoleGetPageDTO) throws Exception;

    /**
     * <desc>
     *      修改住户角色组信息
     * </desc>
     *
     * @param propertyHouseholdRoleGetPageDTO 获取分页住户角色组信息DTO
     * @return 1-成功，0-失败
     * @author wangzhi
     * @createDate 2019/02/21
     */
    Integer update(PropertyHouseholdRoleGetPageDTO propertyHouseholdRoleGetPageDTO) throws Exception;

    /**
     * <desc>
     *      校验住户角色组信息是否有关联数据
     * </desc>
     *
     * @param propertyHouseholdRoleGetPageDTO 获取分页住户角色组信息DTO
     * @return 1-有，0-无
     * @author wangzhi
     * @createDate 2019/02/21
     */
    Integer checkRoleData(PropertyHouseholdRoleGetPageDTO propertyHouseholdRoleGetPageDTO) throws Exception;

    /**
     * <desc>
     *      删除住户角色组信息
     * </desc>
     *
     * @param propertyHouseholdRoleGetPageDTO 获取分页住户角色组信息DTO
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2019/02/21
     */
    Integer delete(PropertyHouseholdRoleGetPageDTO propertyHouseholdRoleGetPageDTO) throws Exception;

    /**
     * <desc>
     *      分页获取门禁设备列表信息
     * </desc>
     *
     * @param propertyHouseholdRoleGetPageDTO 获取分页住户角色组信息DTO
     * @return 门禁设备列表信息
     * @author wangzhi
     * @createDate 2019/02/21
     */
    Page<PropertyHouseholdRoleEntranceGetPageVO> getEntrancePage(PropertyHouseholdRoleGetPageDTO propertyHouseholdRoleGetPageDTO) throws Exception;

    /**
     * <desc>
     *      获取角色绑定的用户id列表
     * </desc>
     *
     * @param roleId 角色id
     * @return 用户id列表
     * @author wangzhi
     * @createDate 2019/02/21
     */
    List<String> getUserIdListByRoleId(String roleId) throws Exception;

    /**
     * <desc>
     *      获取角色绑定的用户id列表,有人脸的用户
     * </desc>
     *
     * @param roleId 角色id
     * @param projectId 项目id
     * @return 用户id列表
     * @author Qiang.S
     * @createDate 2020/03/16
     */
    List<String> getUserIdFaceListByRoleId(String roleId, String projectId) throws Exception;

    /**
     * <desc>
     *      获取角色绑定的设备序列号列表
     * </desc>
     *
     * @param roleId 角色id
     * @param type 1为查询启用状态 2为非删除状态
     * @return 用户id列表
     * @author wangzhi
     * @createDate 2019/02/22
     */
    List<String> getDeviceUniqueListByRoleId(String roleId,String type) throws Exception;

    /**
     * <desc>
     *      获取用户在非指定分组的设备序列号列表
     * </desc>
     *
     * @param roleId 角色id
     * @param userId 用户id
     * @param projectId 项目id
     * @return 设备列表
     * @author Juguang.S
     * @createDate 2021/04/02
     */
    List<String> getEntranceListByNotInRoleIdAndUserId(String roleId,String userId,String projectId) throws Exception;

    /**
     * <desc>
     *      获取角色绑定的电梯设备序列号列表
     * </desc>
     *
     * @param roleId 角色id
     * @param type 1为查询启用状态 2为非删除状态
     * @return 用户id列表
     * @author Juguang.S
     * @createDate 2021/04/01
     */
    Map<String,Object> getElevatorListByRoleId(String roleId,String type) throws Exception;

    /**
     * <desc>
     *      获取用户非指定分组外的电梯设备序列号列表
     * </desc>
     *
     * @param roleId 角色id
     * @param userId 用户id
     * @param projectId 项目id
     * @return 用户id列表
     * @author Juguang.S
     * @createDate 2021/04/02
     */
    Map<String,Object> getElevatorListByNotInRoleIdAndUserId(String roleId,String userId,String projectId) throws Exception;

    /**
     * <desc>
     *      住户角色组信息设备授权
     * </desc>
     *
     * @return 0-失败
     * @author wangzhi
     * @createDate 2019/02/22
     */
    Integer deviceAuth(PropertyHouseholdRoleAuthDTO propertyHouseholdRoleAuthDTO) throws Exception;

    /**
     * <desc>
     *      住户角色组信息人员分配
     * </desc>
     *
     * @return 0-失败 1-成功
     * @author wangzhi
     * @createDate 2019/02/22
     */
    Integer userAuth(PropertyHouseholdRoleAuthDTO propertyHouseholdRoleAuthDTO) throws Exception;

    /**
     * <desc>
     *      拿到当前角色id所有普通门禁设备序列号字符串
     * </desc>
     *
     * @return 所有普通门禁设备序列号字符串
     * @author wangzhi
     * @createDate 2019/02/22
     */
    String getAllDeviceUniqueStr(String projectId) throws Exception;

    /**
     *<desc>
     *      根据项目编号查询所有的电梯设备
     *</desc>
     *
     * @return 所有的电梯设备序列号字符串
     * @author Juguang.S
     * @createDate 2021/04/01
     */
    String getAllElevatorDeviceUniqueStr(String projectId) throws Exception;

    /**
     *<desc>
     *      过滤有人脸的用户
     *</desc>
     *
     * @param userIds 用户id
     * @param projectId 项目id
     * @return
     * @author Qiang.S
     * @createDate 2020/03/16
     */
    List<String> getUserHaveFace(List<String> userIds, String projectId) throws Exception;

    /**
     * <desc>
     *      获取电梯分页列表
     * </desc>
     *
     * @param
     * @return 电梯分页列表
     * @Author Zhu.yj
     * @createDate  2021/3/29
     */
    Page<PropertyHouseHoldRoleElevatorGetPageVO> getElevatorPage(PropertyHouseholdRoleGetPageDTO propertyHouseholdRoleGetPageDTO) throws Exception;

    /**
     * <desc>
     *      校验输入的用户分组是否合法
     * </desc>
     *
     * @param userGroups 用户分组逗号拼接字符串
     * @return 分组id列表
     * @Author Zhu.yj
     * @createDate  2021/4/9
     */
    List<String> checkUserGroupExist(String userGroups, String projectId) throws Exception;


    /**
     * <desc>
     *      删除用户权限
     * </desc>
     *
     * @param userId 用户id
     * @return
     * @Author Zhu.yj
     * @createDate  2021/4/13
     */
    Integer deleteUserDeviceAuth(String userId, String projectId) throws Exception;

    /**
     * <desc>
     *      用户角色组授权
     * </desc>
     *
     * @param propertyHouseholdRoleAuthDTO 用户及角色组传参
     * @return
     * @Author Zhu.yj
     * @createDate  2021/4/22
     */
    Integer userRoleGroupAuth(PropertyHouseholdRoleAuthDTO propertyHouseholdRoleAuthDTO) throws Exception;

    /**
     * <desc>
     *      获取指定电梯所绑定群控器下的所有电梯
     * </desc>
     *
     * @param deviceUnique 电梯唯一编码
     * @return 电梯机号
     * @Author Juguang.S
     * @createDate  2021/5/10
     */
    List<String> getCloudControllerElevatorInfo(String deviceUnique) throws Exception;

    /**
     * <desc>
     *      获取同一群控器下绑定的电梯
     * </desc>
     *
     * @param currentDeviceUniques 当前也所有设备唯一码
     * @return
     * @Author Zhu.yj
     * @createDate  2021/5/17
     */
    String getDeviceUniqueIdList(String currentDeviceUniques, String projectId) throws Exception;
}
